package service

import (
	"gin_im/helper"
	"gin_im/models"
	"github.com/gin-gonic/gin"
	"net/http"
	"strconv"
)

func ChatList(c *gin.Context) {
	// 从URL查询参数中获取房间标识
	roomIdentity := c.Query("room_identity")

	// 验证房间号是否为空
	if roomIdentity == "" {
		// 返回错误响应：房间号不能为空
		c.JSON(http.StatusOK, gin.H{
			"code": -1,        // 错误代码
			"msg":  "房间号不能为空", // 错误信息
		})
		return // 终止函数执行
	}

	// 判断用户是否属于该房间
	uc := c.MustGet("user_claims").(*helper.UserClaims) // 从上下文中获取用户身份信息
	// 查询用户与房间的关联关系
	if _, err := models.GetUserRoomByUserIdentityRoomIdentity(uc.Identity, roomIdentity); err != nil {
		// 用户不属于该房间，无权访问
		c.JSON(http.StatusOK, gin.H{"code": -1, "msg": "非法访问"})
		return // 终止执行
	}

	// 分页参数处理
	pageIndex, _ := strconv.ParseInt(c.Query("page_index"), 10, 32) // 获取页码，默认第1页
	pageSize, _ := strconv.ParseInt(c.Query("page_size"), 10, 32)   // 获取每页数量
	skip := (pageIndex - 1) * pageSize                              // 计算需要跳过的记录数

	// 聊天记录查询
	// 调用数据层方法，根据房间标识获取分页的聊天记录列表
	data, err := models.GetMessageListByRoomIdentity(roomIdentity, &pageSize, &skip)
	if err != nil {
		c.JSON(http.StatusOK, gin.H{"code": -1, "msg": "系统异常:" + err.Error()})
		return
	}

	// 返回数据
	c.JSON(http.StatusOK, gin.H{
		"code": 200,      // 状态码：200表示成功
		"msg":  "数据加载成功", // 提示消息：操作成功说明
		"data": gin.H{ // 返回数据主体
			"list": data, // 数据列表：实际的聊天记录数据
		},
	})
}
